A proxy is a device that acts as an intermediary between two or more devices. The proxy may provide improved performance, load balancing, management, or addition functionality. In most storage deployments, a partitioning exists between devices that operate as initiators and devices that operate as targets for the initiators. Targets are intended to provide access to storage whereas initiators allow access to that storage by applications. A deployed proxy is inserted between selected initiators and targets. The initiators and targets are then said to be proxied by the proxy device, or connected through said proxy.
Proxy behavior can be defined as either transparent or non-transparent. Initiator and target devices see no operational difference in their interaction before and after a transparent proxy is installed. Initiators and targets connected through a non-transparent proxy may see no operational difference but will incur some behavioral difference, especially concerning the temporal sequence of storage access events. In some cases, it may be desired to configure the proxy so that the initiators and targets cannot detect the presence of the proxy. Of particular concern is the ability to maintain a proxied connection between an initiator and a target while ensuring correctness of the communication protocol so that all operations provide identical results for proxied and non-proxied configurations.